package cn.itcast.nems.studentrecord.dao.entity;

import cn.itcast.nems.common.entity.UUIDEntity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * <p>
 * 退学凭单-头
 * </p>
 *
 * @author 陈早庆
 * @since 2023-12-07
 */
@TableName("e2_journal_dropout")
@Getter
@Setter
public class JournalDropout extends UUIDEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 退学的学籍ID
     */
    private String studentRecordId;

    /**
     * 业务实际办理日期;退学日期。
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonSerialize(using = LocalDateTimeSerializer.class)
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    private LocalDateTime bizDate;

    /**
     * 退费类型;枚举值：退学不退费｜、退学退费｜
     */
    private String type;

    /**
     * 退学的班级ID
     */
    private Integer clazzId;

    /**
     * 退学的班级名称
     */
    private String clazzName;

    /**
     * 退学原因CODE;来自字典表
     */
    private String reasonCode;

    /**
     * 退学原因说明;来自字典表
     */
    private String reasonDescription;

    /**
     * 应服务天数
     */
    private Integer serviceDays;

    /**
     * 实际服务天数
     */
    private Integer settlementDays;

    /**
     * 实际应付金额;来自于学籍
     */
    private Integer actualAmountDue;

    /**
     * 结算金额/课耗
     */
    private Integer settlementAmount;

    /**
     * 已付金额;来自于学籍
     */
    private Integer paidAmount;

    /**
     * 转班转入金额;来自于学籍。非转班该字段金额为零
     */
    private Integer transferFromAmount;

    /**
     * 退费金额（过往退费金额）;来自于学籍，不算本次退费金额。
     */
    private Integer refundAmount;

    /**
     * 结算余额/剩余金额;结算余额 = 已付金额 + 转班转入金额 - 退费金额（过往退费） - 结算金额；注：永远不能为负。当前未考虑出班后再退费的情况，如果出班后需要再退费，此公式需要再考虑转班转出的金额！
     */
    private Integer settlementBalanceAmount;

    /**
     * 本次退费金额
     */
    private Integer amount;

    /**
     * 状态;枚举值：草稿｜DRAFT、待审批｜PENDING、审批中｜APPROVING、审批未通过｜REJECTED、已完成｜FINISHED
     */
    private String state;

    /**
     * 备注
     */
    private String remark;

    /**
     * 退费凭单ID;只有在“退学退费”时才会产生
     */
    private String journalRefundId;

    /**
     * 是否特殊退费：0否、1是
     */
    private Boolean specialFlag;
    /**
     * 是否已开发票；枚举值：未开发票｜0、已开票｜1
     */
    private Boolean invoiceFlag;
    /**
     * 是否贷款学员；枚举值：非贷款学员｜0、贷款学员｜1
     */
    private Boolean loanFlag;
    /**
     * 所属公司编码;财务上退费资金所属的公司。
     */
    private String companyCode;
    /**
     * 所属公司名称；财务上退费资金所属的公司。
     */
    private String companyName;
}
